home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 05 / 6 / DISK0564.ZIP / SOURCE.ARC / ASM.ARC / CONVERT.ASM < prev    next >
Assembly Source File  |  1987-11-05  |  3KB  |  125 lines

  1.         TITLE   CONVERSION ROUTINES
  2. ;    LAST MODIFIED 04-OCT-86
  3.         .XLIST
  4.         INCLUDE ASCII.DEF
  5.         .LIST
  6.  
  7.     DOSSEG
  8.     .MODEL    SMALL
  9.  
  10.     .DATA?
  11. TEMPSTOR DB    5 DUP(?)
  12.  
  13.     .CODE
  14. EXTRN   COUT:NEAR
  15.         PUBLIC BTODEC, DTOBIN, DECOUT
  16.  
  17. ;       BTODEC - CONVERT BINARY TO DECIMAL
  18. ;       ENTRY:  (AX) = BINARY WORD
  19. ;               (BX) = ADDRESS FOR DECIMAL DIGITS
  20. ;       USES:   AX,BX,CX,DX
  21. ;
  22. BTODEC  PROC    NEAR
  23.         MOV     CX,10000
  24. BTOD1:
  25.         PUSH    CX
  26.         MOV     DL,"0"
  27. SUBMORE:
  28.         SUB     AX,CX
  29.         INC     DL
  30.         JNB     SUBMORE
  31.         DEC     DL
  32.         ADD     AX,CX
  33.         MOV     [BX],DL
  34.         INC     BX
  35.         POP     CX
  36.         PUSH    AX
  37.         PUSH    BX
  38.         MOV     AX,CX
  39.         MOV     BX,10
  40.         MOV     DX,0
  41.         DIV     BX
  42.         POP     BX
  43.         MOV     CX,AX
  44.         CMP     CX,0
  45.         POP     AX
  46.         JNE     BTOD1
  47.         RET
  48. BTODEC  ENDP
  49.  
  50. ;       DECOUT = OUTPUT DECIMAL NUMBER TO CONSOLE
  51. ;       ENTRY:  BX = NUMBER (IN BINARY)
  52. ;               CX = FIELD WIDTH
  53. ;               AL = CHAR. TO USE INSTEAD OF LEADING "0"
  54. ;        (0 TO SUPPRESS LEADING 0'S)
  55. ;
  56. DECOUT  PROC    NEAR
  57.         PUSH    AX
  58.         MOV     AX,BX
  59.         MOV     BX,OFFSET TEMPSTOR
  60.         PUSH    CX
  61.         CALL    BTODEC
  62.         POP     CX
  63.         POP     AX
  64.         MOV     BX,OFFSET TEMPSTOR+5
  65.         SUB     BX,CX
  66.         CMP     CX,1
  67.         JLE     SHOWDEC
  68.         DEC     CX
  69. ZEROSUP:
  70.         MOV     DL,[BX+0]
  71.         CMP     DL,"0"
  72.         JNZ     SHORT DONESUP
  73.     AND    AL,AL
  74.     JZ    SUP0
  75.         CALL    COUT
  76. SUP0:
  77.     INC     BX
  78.         LOOP    ZEROSUP
  79. DONESUP:
  80.         INC     CX
  81. SHOWDEC:
  82.         MOV     AL,[BX]
  83.         CALL    COUT
  84.         INC     BX
  85.         LOOP    SHOWDEC
  86.         RET
  87. DECOUT  ENDP
  88.  
  89. ;       DTOBIN = CONVERT DECIMAL TO BINARY
  90. ;       ENTRY: BX POINTS TO DECIMAL DIGIT (MSD)
  91. ;              CX HOLDS NUMBER OF DIGITS (5 MAX.)
  92. ;       EXIT: 'C'=1 IF OVERFLOW OR ILLEGAL CHAR. IN DIGIT STRING
  93. ;               AX = RESULT OF CONVERSION
  94. ;
  95. DTOBIN  PROC    NEAR
  96.         MOV     DX,0            ;ACCUMULATOR FOR RESULT
  97. DTOB1:  MOV     AL,[BX+0]
  98.         SUB     AL,"0"
  99.         JB      SHORT BADCHAR
  100.         CMP     AL,10
  101.         JGE     SHORT BADCHAR
  102.         PUSH    AX
  103.         INC     BX
  104.         PUSH    BX
  105.         MOV     AX,DX
  106.         MOV     BX,10
  107.         MUL     BX
  108.         POP     BX
  109.         JC      SHORT OVFLOW    ;IF >65535
  110.         MOV     DX,AX
  111.         POP     AX
  112.         MOV     AH,0
  113.         ADD     DX,AX
  114.         LOOP    DTOB1
  115.         MOV     AX,DX
  116.         CLC
  117.         RET
  118. OVFLOW:
  119. BADCHAR:
  120.         STC
  121.         RET
  122. DTOBIN  ENDP
  123.  
  124.         END
  125.